package com.ms.mybaitisdemo.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.ms.mybaitisdemo.model.Emp;
import com.ms.mybaitisdemo.util.SqlSessionFactoryUtil;

/**
 * 
 * 使用SqlSessionFactory对象，创建SqlSession，然后执行对应的sql语句。
 * 
 * 备注：
 * 
 * Mybatis将会把所有的sql语句，外部化，放到一个配置文件中。
 * 
 * 然后我们通过对应的ID，获取、执行以及得到对应的结果集。
 * 
 * @author Administrator
 *
 */
public class EmpDaoImpl implements EmpDao {

	public int addEmp(Emp emp) {

		/**
		 * 第一步：从SqlSessionFactory对象获取sqlSession
		 */
		SqlSessionFactory factory = SqlSessionFactoryUtil.getInstance().getSqlSessionFactory();

		SqlSession session = factory.openSession();

		/**
		 * 第二步：使用SqlSession对象，执行外部化的sql
		 */
		int ret = session.insert("insertEmp", emp);

		// 显示需要提交事物（如果不打开，无法插入数据）
		session.commit();

		/**
		 * 第三步：关闭资源
		 */
		session.close();

		return ret;
	}

	public int deleteEmp(Integer empno) {

		SqlSessionFactory factory = SqlSessionFactoryUtil.getInstance().getSqlSessionFactory();

		SqlSession session = factory.openSession();
		
		int ret =  session.delete("deleteEmpByEmpno", empno);
		
		session.commit();
		
		session.close();
		
		return ret;
	}

	public int updateEmp(Emp emp) {
		
		SqlSessionFactory factory = SqlSessionFactoryUtil.getInstance().getSqlSessionFactory();

		SqlSession session = factory.openSession();
		
		int ret =  session.update("updateEmp", emp);
		
		session.commit();
		
		session.close();
		
		return ret;
	}

	public List<Emp> queryEmps() {
		
		SqlSessionFactory factory = SqlSessionFactoryUtil.getInstance().getSqlSessionFactory();

		SqlSession session = factory.openSession();
		
		return session.selectList("selectEmp");
	}

	public Emp queryEmpByEmpno(Integer empno) {
		
		SqlSessionFactory factory = SqlSessionFactoryUtil.getInstance().getSqlSessionFactory();

		SqlSession session = factory.openSession();
		
		return session.selectOne("selectEmpbyEmpno", empno);
	}
	
}
